package main

import (
	"time"
	"wecom_rebot/commands"
	"wecom_rebot/common"
	"wecom_rebot/core"
	"wecom_rebot/jobs"
	"wecom_rebot/services"
)

func init() {
	// 1. 提前加载配置文件
	core.YamlInitConfig()
}
func main() {
	// 2. 初始化日志
	common.Log = core.InitLogger(common.LogsErrorMap[1])
	// 3. 连接数据库
	common.DB = core.InitGorm()
	// 3.1 垫款数据库
	common.DBDk = core.InitDkGorm()
	// 4. redis 初始化
	common.Redis = core.ConnectRedis()

	// 5. 初始化消费者日志（在 common 初始化后）
	// 接收任务日志
	jobs.InitConsumerLogger()
	// 腾讯复制户日志
	services.InitCopyAccountLogger()
	// 给企微发消息或文件日志
	services.InitSendMessageLogger()
	// 巨量指定账户绑定日志
	services.InitOeBindSaleLogger()
	// 巨量批量绑定账户日志
	services.InitOeBindBatchLogger()
	// 巨量AD复制户日志
	services.InitAdAccountCopyLogger()
	// 巨量AD开户日志
	services.InitAdAccountOpenLogger()
	// 巨量AD查询直客日志
	services.InitAdSearchWithoutLogger()
	// 巨量本地推复制户日志
	services.InitLocalAccountCopyLogger()
	// 巨量本地推开户日志
	services.InitLocalAccountOpenLogger()
	// 巨量本地推查询直客日志
	services.InitLocalSearchWithoutLogger()
	// 巨量千川复制户日志
	services.InitQcAccountCopyLogger()
	// 巨量千川开户日志
	services.InitQcAccountOpenLogger()
	// 巨量千川查询直客日志
	services.InitQcSearchWithoutLogger()
	// 快手复制户日志
	services.InitKsCopyAccountLogger()
	// 快手发送验证码日志
	services.InitKsSendSmsLogger()
	// 小红书绑定销售日志
	services.InitXhsBindSaleLogger()
	// 腾讯同步到广告主表
	commands.InitTxSyncLogger()
	// 快手同步到广告主表
	commands.InitKsSyncLogger()
	// 巨量AD同步到广告主表
	commands.InitOeAdSyncLogger()
	// 巨量本地推同步到广告主表
	commands.InitOeLocalSyncLogger()
	// 巨量千川同步到广告主表
	commands.InitOeQcSyncLogger()
	// 小红书修改指定字段
	commands.InitXhsSyncLogger()

	// 定时任务启动
	go func() {

		defer func() {
			if r := recover(); r != nil {
				common.Log.Errorf("定时任务 panic: %v", r)
			}
		}()

		common.Log.Info("定时任务 goroutine 启动")
		ticker := time.NewTicker(1 * time.Minute)
		defer ticker.Stop()

		for {
			select {
			case <-ticker.C:
				// 执行定时任务
				common.Log.Info("开始执行复制定时任务")
				commands.CopyInsertTencent()
				commands.CopyInsertKs()
				commands.CopyOeadAccount()
				commands.CopyInsertXhsAccount()
				commands.CopyOeLocalAccount()
				commands.CopyOeQcAccount()
				common.Log.Info("复制定时任务执行完成")
			}
		}
	}()

	// 实时任务协程（无延迟循环）
	jobs.Worker()

}
